package com.gugee.common.web.util;//package com.xiguaji.tiktok.utils;
//
//import cn.hutool.core.util.ClassLoaderUtil;
//import com.lowagie.text.BadElementException;
//import com.lowagie.text.Image;
//import com.lowagie.text.pdf.BaseFont;
//import com.lowagie.text.pdf.codec.Base64;
//import freemarker.template.Configuration;
//import freemarker.template.Template;
//import org.w3c.dom.Element;
//import org.xhtmlrenderer.extend.FSImage;
//import org.xhtmlrenderer.extend.ReplacedElement;
//import org.xhtmlrenderer.extend.ReplacedElementFactory;
//import org.xhtmlrenderer.extend.UserAgentCallback;
//import org.xhtmlrenderer.layout.LayoutContext;
//import org.xhtmlrenderer.pdf.ITextFSImage;
//import org.xhtmlrenderer.pdf.ITextImageElement;
//import org.xhtmlrenderer.pdf.ITextRenderer;
//import org.xhtmlrenderer.render.BlockBox;
//import org.xhtmlrenderer.simple.extend.FormSubmissionListener;
//
//import java.io.ByteArrayOutputStream;
//import java.io.IOException;
//import java.io.OutputStream;
//import java.io.StringWriter;
//import java.net.URLEncoder;
//import java.util.HashMap;
//import java.util.Locale;
//import java.util.Map;
//
//public class PDFTemplateUtil {
//    /**
//     * 通过模板导出pdf文件
//     * @param data 数据
//     * @param templateFileName 模板文件名
//     * @throws Exception
//     */
//    public static ByteArrayOutputStream createPDF(Map<String,Object> data, String templateFileName) throws Exception {
//        // 创建一个FreeMarker实例, 负责管理FreeMarker模板的Configuration实例
//        Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
//        // 指定FreeMarker模板文件的位置
//        cfg.setClassForTemplateLoading(PDFTemplateUtil.class,"/templates");
//        ITextRenderer renderer = new ITextRenderer();
//        OutputStream out = new ByteArrayOutputStream();
//        try {
//            // 设置 css中 的字体样式（暂时仅支持宋体和黑体） 必须，不然中文不显示
//            renderer.getFontResolver().addFont(ClassLoaderUtil.getClassLoader().getResource("").getPath()+"templates/font/simsun.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//            // 设置模板的编码格式
//            cfg.setEncoding(Locale.CHINA, "UTF-8");
//            // 获取模板文件
//            Template template = cfg.getTemplate(templateFileName, "UTF-8");
//            StringWriter writer = new StringWriter();
//
//            // 将数据输出到html中
//            template.process(data, writer);
//            writer.flush();
//
//            String html = writer.toString();
//            // 把html代码传入渲染器中
//            renderer.setDocumentFromString(html);
//
//            // 设置模板中的图片路径 （这里的images在resources目录下） 模板中img标签src路径需要相对路径加图片名 如<img src="images/xh.jpg"/>
//           /* String url = PDFTemplateUtil.class.getClassLoader().getResource("images").toURI().toString();
//            renderer.getSharedContext().setBaseURL(url);*/
//            renderer.getSharedContext().setReplacedElementFactory(new Base64ImgReplacedElementFactory());
//            renderer.getSharedContext().getTextRenderer().setSmoothingThreshold(10);
//            renderer.layout();
//
//            renderer.createPDF(out, false);
//            renderer.finishPDF();
//            out.flush();
//            return (ByteArrayOutputStream)out;
//        } catch (Exception e){
//            e.printStackTrace();
//            return null;
//        } finally {
//            if(out != null){
//                out.close();
//            }
//        }
//    }
//
//    public static void main(String[] args) throws Exception {
//        Map<String,Object> data = new HashMap<>();
//        data.put("title","bbss");
//        //data.put("sb","https://p16-amd-va.tiktokcdn.com/tos-maliva-avt-0068/78ab91250acaae68682855273283c02d~c5_168x168.webp?.jpg");
//        data.put("bs","https://xiguas3-imgs.s3.amazonaws.com/527960919video/6888853547396402438");
//        //data.put("bs","https://m1-1253159997.image.myqcloud.com/imageDir/71d97a1b9ccc208083839bce95632b82.jpg");
//        ByteArrayOutputStream baos = PDFTemplateUtil.createPDF(data,"/pdf/comparison.ftl");
//        // 告诉浏览器，当前响应数据要求用户干预保存到文件中，以及文件名是什么 如果文件名有中文，必须URL编码
//        String fileName = URLEncoder.encode("月度报告.pdf", "UTF-8");
//    }
//
//
//    static class Base64ImgReplacedElementFactory implements ReplacedElementFactory {
//
//
//        /**
//         * 实现createReplacedElement 替换html中的Img标签
//         *
//         * @param c 上下文
//         * @param box 盒子
//         * @param uac 回调
//         * @param cssWidth css宽
//         * @param cssHeight css高
//         * @return ReplacedElement
//         */
//        @Override
//        public ReplacedElement createReplacedElement(LayoutContext c, BlockBox box, UserAgentCallback uac,
//                                                     int cssWidth, int cssHeight) {
//            Element e = box.getElement();
//            if (e == null) {
//                return null;
//            }
//            String nodeName = e.getNodeName();
//            // 找到img标签
//            if (nodeName.equals("img")) {
//                String attribute = e.getAttribute("src");
//                FSImage fsImage;
//                try {
//                    // 生成itext图像
//                    fsImage = buildImage(attribute, uac);
//                } catch (BadElementException e1) {
//                    fsImage = null;
//                } catch (IOException e1) {
//                    fsImage = null;
//                }
//                if (fsImage != null) {
//                    // 对图像进行缩放
//                    if (cssWidth != -1 || cssHeight != -1) {
//                        fsImage.scale(cssWidth, cssHeight);
//                    }
//                    return new ITextImageElement(fsImage);
//                }
//            }
//
//
//            return null;
//        }
//
//
//        /**
//         * 编解码base64并生成itext图像
//         */
//        protected FSImage buildImage(String srcAttr, UserAgentCallback uac) throws IOException,
//                BadElementException {
//            FSImage fiImg=null;
//            if (srcAttr.toLowerCase().startsWith("data:image/")) {
//                String base64Code= srcAttr.substring(srcAttr.indexOf("base64,") + "base64,".length(),
//                        srcAttr.length());
//                // 解码
//                byte[] decodedBytes = Base64.decode(base64Code);
//
//
//                fiImg= new ITextFSImage(Image.getInstance(decodedBytes));
//            } else {
//                byte[] decodedBytes = Base64Utils.ImageToBase64ByOnline(srcAttr);
//                fiImg= new ITextFSImage(Image.getInstance(decodedBytes));
//            }
//            return fiImg;
//        }
//
//
//        public void reset() {}
//
//        @Override
//        public void remove(Element arg0) {}
//
//        @Override
//        public void setFormSubmissionListener(FormSubmissionListener arg0) {}
//
//    }
//}
